Java’da SLF4j ve Log4j Loglama Rehberi: Spring Boot Logging

Java uygulamalarında SLF4J, Log4j2 ve Spring Boot logging mimarisi
Kısa özet: Kod tarafında SLF4J kullanın, altta Logback veya Log4j2 seçin. Spring Boot varsayılan olarak Logback ile gelir; Log4j2’ye geçmek için bağımlılık ve log4j2.xml yapılandırması gerekir.

Java’da doğru loglama; hata ayıklama, izleme ve performans açısından kritiktir. Bu rehberde SLF4J nedir, Log4j nedir, SLF4J vs Log4j farkları ve Spring Boot logging kurulumunu örneklerle öğreneceksiniz.

Token tabanlı güvenlik ve izleme tarafını güçlendirmek için: Token Nedir? Access ve Refresh Token ve JWT Nedir? rehberlerine de göz atabilirsiniz.


Java’da Loglama Neden Kritik?

Java ile sağlam ve ölçeklenebilir uygulamalar geliştirirken etkili bir loglama altyapısı; hata ayıklama, uygulama izleme ve performans hedefleri için vazgeçilmezdir. Doğru kurgulanmış loglar; üretim ortamındaki sorunları hızlı tespit etmenizi, servis davranışını izlemenizi ve olayları geriye dönük analiz etmenizi sağlar.

Hedef: Kodda tek tip API (SLF4J), çalıştırmada doğru motor (Logback/Log4j2) ve prod’da okunabilir/aranabilir log formatı.

SLF4J Nedir? Avantajları Nelerdir?

SLF4J facade katmanı ile farklı log motorlarına geçiş
SLF4J, log motorlarını soyutlayan bir facade katmanıdır.

SLF4J (Simple Logging Facade for Java), Java projelerinde loglama motorlarını soyutlayan bir facade katmanıdır. Kodunuzda org.slf4j.Logger ile log yazarsınız; altta Logback, Log4j2 veya JUL gibi farklı motorlar kullanılabilir.

  • Taşınabilirlik: Log motorunu değiştirdiğinizde uygulama kodunu yeniden yazmanız gerekmez.
  • Basit API: info, warn, error gibi standart seviyeler.
  • Performans: Parametrik loglama ile gereksiz string işlemleri azalır.

Log4j Nedir? Neden Tercih Edilir?

Apache Log4j, Java için yüksek performanslı ve esnek bir loglama kütüphanesidir. Çoklu çıktı (console, file vb.), pattern’ler, filtreler ve asenkron loglama gibi gelişmiş özellikler sunar.

Öneri: Yeni projelerde genellikle Log4j2 tercih edilir (daha modern yapılandırma ve asenkron kullanım seçenekleri).

SLF4J vs Log4j: Temel Farklar ve Doğru Seçim

Başlık SLF4J Log4j / Log4j2
Mimari Facade (arayüz) Log motoru
Bağımlılık Kod motor bağımsızlığı Doğrudan motor API’si / yapılandırma
Geçiş Kolaylığı Çok kolay API bağımlılığı varsa daha zor
Performans Alttaki motora bağlı Log4j2 ile yüksek performans
Sonuç: Uygulama kodunda SLF4J kullanın; altyapıda ihtiyaca göre Logback veya Log4j2 seçin.

Spring Boot Logging: SLF4J ve Log4j2 Entegrasyonu

Spring Boot varsayılan olarak Logback ile gelir ve çoğu proje için yeterlidir. Log4j2 kullanmak istiyorsanız bağımlılıkları değiştirip log4j2.xml dosyanızı eklemeniz gerekir.

application.properties ile Log Seviyesi Yönetimi

logging.level.root=INFO
logging.level.org.springframework=INFO
logging.level.org.hibernate=INFO

Spring Boot ile org.slf4j.Logger Kullanımı

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {
  private static final Logger log = LoggerFactory.getLogger(HomeController.class);

  @GetMapping("/")
  public String home() {
    log.info("HomeController -> home() çağrıldı");
    return "Merhaba, Spring Boot Logging!";
  }
}

Parametrik Loglama ile Performans

Parametrik loglama, log seviyesi aktif değilse gereksiz string birleştirmelerini engeller ve performansı korur:

String userId = "42";
log.info("Kullanıcı oturumu başlatıldı: id={}", userId);

log4j2.xml Örneği (Modern Konfigürasyon)

<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
    </Console>
    <File name="File" fileName="logs/app.log">
      <PatternLayout pattern="%d %-5p [%t] %c - %m%n"/>
    </File>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="File"/>
    </Root>
  </Loggers>
</Configuration>
Not: Üretimde log dosyası için genellikle rolling policy (günlük/MB bazlı döndürme) tercih edilir.

Maven: SLF4J & Log4j2 Bağımlılıkları

<!-- SLF4j API -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>2.0.16</version>
</dependency>

<!-- Log4j2 Core + SLF4j Köprüsü -->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.23.1</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j2-impl</artifactId>
  <version>2.23.1</version>
</dependency>
Uyarı: Bağımlılık çakışmalarına dikkat edin. Projede aynı anda birden fazla SLF4J binding kullanmayın.

Production Best Practices (2026)

  • Log seviyelerini (INFO/WARN/ERROR) ortam bazlı yönetin (dev/prod).
  • PII / hassas veri (token, şifre, kart vb.) loglamayın veya maskeleyin.
  • Correlation ID (traceId) ile istek bazlı izleme yapın.
  • Dosya loglarında rolling kullanın (boyut/gün bazlı döndürme).
  • Yüksek trafikte async logging (Log4j2 Async) değerlendirin.
Pratik: “Önce okunabilirlik” — iyi bir log formatı, incident sırasında en büyük hızlandırıcıdır.

Sık Sorulan Sorular (SSS)

SLF4J nedir?

SLF4J, log motorlarının üzerinde çalışan bir facade katmanıdır. Kodunuzu motor bağımsız hale getirir.

Log4j nedir?

Log4j/Log4j2, yüksek performanslı ve özelleştirilebilir bir loglama motorudur; yapılandırma genellikle XML ile yapılır.

Logback vs Log4j2 vs SLF4J farkı nedir?

SLF4J bir arayüz; Logback ve Log4j2 ise log motorlarıdır. Çoğu projede kod SLF4J ile yazılır, motor seçimi altyapıda yapılır.

Spring Boot logging’i nasıl yönetir?

Spring Boot varsayılan olarak Logback kullanır. Ancak SLF4J API sayesinde Log4j2’ye geçiş mümkündür.


Sonuç

Java projelerinde en sağlıklı yaklaşım: kodda SLF4J, altyapıda ihtiyaca göre Logback veya Log4j2 kullanmaktır. Spring Boot ile seviyeleri application.properties üzerinden yönetebilir, Log4j2 için log4j2.xml ile güçlü bir yapı kurabilirsiniz.

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Blog where the most up-to-date software is followed. (En güncel yazılımların takip edildiği blog sitesi)

Spring Boot ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *